package com.mydemo.game.hireStage;

import com.mydemo.entity.Driver;
import com.mydemo.entity.Save;
import com.mydemo.game.hireStage.random.DriverRandom;
import com.mydemo.print.Print;
import com.mydemo.utils.dataUtils.DataUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import static java.lang.Thread.sleep;

public class TalentMarket {
    private static final List<Driver> chosenDrivers = new ArrayList<>(); // 创建一个列表用于存储已选择的司机

    public static final Save talentMarket(Save save) {
        /*
          首先先读取driver文件中所有的driver然后打印
          这些是固定会存在的driver，没有任何技能和词条之类的，水平也是最低级的
          然后是通过一个随机方法，生成一些高薪，但是拥有初始登记或者词条，技能的司机
          然后生成一个列表存储起来先（存储在选择循环外）
          每选择一个就从里面移除一个
          然后向选择的列表里面添加这个司机
          最后在确认雇佣的时候将这个列表加到save的司机列表后面即可
          */
//        ↓ 先生成今日的司机列表
        DataUtil<Driver, ?> driverDataUtil = new DataUtil<>(Driver.class, "Driver");
        List<Driver> driverList = driverDataUtil.select().selectAll();
        int id = 1;
        for (int i = 0; i < 4; i++) {
            id++;
            Driver driver = DriverRandom.randomDriver();
            driver.setId(id);
            driverList.add(driver);
        }
        boolean flag = true;
        while (flag) {
            System.out.println("可供选择的司机：");
            for (Driver d : driverList) {
                Print.printDriver(d);
            }
            System.out.println("--------------------");
            System.out.println("已选择的司机");
            for (Driver d :
                    chosenDrivers) {
                Print.printDriver(d);
            }
            System.out.println("雇佣请按序号，退出请按0");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();
            if (choice == 0) {
                flag = false;
            } else {
                Driver selectedDriver = getDriverById(driverList, choice);
                if (selectedDriver != null) {
                    if (HireDriver.hireDriver(save,selectedDriver)) {
                        driverList.remove(selectedDriver); // 从可选列表中移除
                        chosenDrivers.add(selectedDriver); // 加入到已选列表
                        System.out.println("已选择司机：" + selectedDriver.getName());
                    }else {
                        System.out.println("放弃选择");
                    }
                } else {
                    System.out.println("未找到对应ID的司机");
                    try {
                        sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }
        chosenDrivers.clear();
        return save;
    }

    // 辅助函数，根据ID查找司机
    private static Driver getDriverById(List<Driver> drivers, int id) {
        for (Driver driver : drivers) {
            if (driver.getId() == id) {
                return driver;
            }
        }
        return null;
    }
}
